/**
 * 汽车服务业务API接口
 * 对接若依微服务后端
 */

import httpClient from './http.js'
import { MODULE_PATHS } from './config.js'

/**
 * 用户车辆管理API
 */
export const userVehicleAPI = {
  /**
   * 获取用户车辆列表
   * @param {Object} params 查询参数
   * @param {number} params.pageNum 页码
   * @param {number} params.pageSize 每页数量
   * @param {string} params.plateNumber 车牌号（可选）
   * @returns {Promise} 车辆列表
   */
  getVehicleList(params = {}) {
    return httpClient.get(`${MODULE_PATHS.USER_VEHICLE}/list`, params)
  },

  /**
   * 添加车辆
   * @param {Object} data 车辆信息
   * @param {string} data.plateNumber 车牌号
   * @param {string} data.brand 品牌
   * @param {string} data.model 型号
   * @param {string} data.color 颜色
   * @param {string} data.engineNumber 发动机号
   * @param {string} data.frameNumber 车架号
   * @returns {Promise} 添加结果
   */
  addVehicle(data) {
    return httpClient.post(`${MODULE_PATHS.USER_VEHICLE}`, data)
  },

  /**
   * 更新车辆信息
   * @param {number} vehicleId 车辆ID
   * @param {Object} data 更新数据
   * @returns {Promise} 更新结果
   */
  updateVehicle(vehicleId, data) {
    return httpClient.put(`${MODULE_PATHS.USER_VEHICLE}/${vehicleId}`, data)
  },

  /**
   * 删除车辆
   * @param {number} vehicleId 车辆ID
   * @returns {Promise} 删除结果
   */
  deleteVehicle(vehicleId) {
    return httpClient.delete(`${MODULE_PATHS.USER_VEHICLE}/${vehicleId}`)
  },

  /**
   * 获取车辆详情
   * @param {number} vehicleId 车辆ID
   * @returns {Promise} 车辆详情
   */
  getVehicleDetail(vehicleId) {
    return httpClient.get(`${MODULE_PATHS.USER_VEHICLE}/${vehicleId}`)
  }
}

/**
 * 救援服务API
 */
export const rescueAPI = {
  /**
   * 提交救援请求
   * @param {Object} data 救援请求数据
   * @param {string} data.serviceType 救援类型：jump(搭电), tire(换胎), tow(拖车)
   * @param {string} data.location 当前位置
   * @param {string} data.requester 求助人姓名
   * @param {string} data.contact 联系方式
   * @param {number} data.vehicleId 车型ID
   * @param {string} data.description 问题描述
   * @param {string} data.startPoint 起点（仅拖车服务）
   * @param {string} data.endPoint 终点（仅拖车服务）
   * @returns {Promise} 提交结果
   */
  submitRescueRequest(data) {
    return httpClient.post(`${MODULE_PATHS.RESCUE}/submit`, data)
  },

  /**
   * 获取救援记录列表
   * @param {Object} params 查询参数
   * @param {number} params.pageNum 页码
   * @param {number} params.pageSize 每页数量
   * @param {string} params.status 状态筛选
   * @returns {Promise} 救援记录列表
   */
  getRescueRecords(params = {}) {
    return httpClient.get(`${MODULE_PATHS.RESCUE}/records`, params)
  },

  /**
   * 获取救援详情
   * @param {number} rescueId 救援ID
   * @returns {Promise} 救援详情
   */
  getRescueDetail(rescueId) {
    return httpClient.get(`${MODULE_PATHS.RESCUE}/${rescueId}`)
  },

  /**
   * 取消救援请求
   * @param {number} rescueId 救援ID
   * @returns {Promise} 取消结果
   */
  cancelRescue(rescueId) {
    return httpClient.put(`${MODULE_PATHS.RESCUE}/${rescueId}/cancel`)
  }
}

/**
 * 维修服务API
 */
export const repairAPI = {
  /**
   * 获取维修店列表
   * @param {Object} params 查询参数
   * @param {number} params.pageNum 页码
   * @param {number} params.pageSize 每页数量
   * @param {string} params.keyword 关键词搜索
   * @param {number} params.latitude 纬度
   * @param {number} params.longitude 经度
   * @returns {Promise} 维修店列表
   */
  getRepairShopList(params = {}) {
    return httpClient.get(`${MODULE_PATHS.REPAIR}/shops`, params)
  },

  /**
   * 获取维修店详情
   * @param {number} shopId 店铺ID
   * @returns {Promise} 店铺详情
   */
  getRepairShopDetail(shopId) {
    return httpClient.get(`${MODULE_PATHS.REPAIR}/shops/${shopId}`)
  },

  /**
   * 预约维修服务
   * @param {Object} data 预约数据
   * @param {number} data.shopId 店铺ID
   * @param {number} data.vehicleId 车辆ID
   * @param {string} data.serviceType 服务类型
   * @param {string} data.appointmentTime 预约时间
   * @param {string} data.description 问题描述
   * @returns {Promise} 预约结果
   */
  bookRepairService(data) {
    return httpClient.post(`${MODULE_PATHS.REPAIR}/book`, data)
  },

  /**
   * 获取维修记录
   * @param {Object} params 查询参数
   * @returns {Promise} 维修记录列表
   */
  getRepairRecords(params = {}) {
    return httpClient.get(`${MODULE_PATHS.REPAIR}/records`, params)
  }
}

/**
 * 洗车服务API
 */
export const carWashAPI = {
  /**
   * 获取洗车店列表
   * @param {Object} params 查询参数
   * @param {number} params.pageNum 页码
   * @param {number} params.pageSize 每页数量
   * @param {string} params.keyword 关键词搜索
   * @param {number} params.latitude 纬度
   * @param {number} params.longitude 经度
   * @returns {Promise} 洗车店列表
   */
  getCarWashShopList(params = {}) {
    return httpClient.get(`${MODULE_PATHS.CAR_WASH}/shops`, params)
  },

  /**
   * 获取洗车店详情
   * @param {number} shopId 店铺ID
   * @returns {Promise} 店铺详情
   */
  getCarWashShopDetail(shopId) {
    return httpClient.get(`${MODULE_PATHS.CAR_WASH}/shops/${shopId}`)
  },

  /**
   * 预约洗车服务
   * @param {Object} data 预约数据
   * @param {number} data.shopId 店铺ID
   * @param {number} data.vehicleId 车辆ID
   * @param {string} data.serviceType 服务类型
   * @param {string} data.appointmentTime 预约时间
   * @returns {Promise} 预约结果
   */
  bookCarWashService(data) {
    return httpClient.post(`${MODULE_PATHS.CAR_WASH}/book`, data)
  },

  /**
   * 获取洗车记录
   * @param {Object} params 查询参数
   * @returns {Promise} 洗车记录列表
   */
  getCarWashRecords(params = {}) {
    return httpClient.get(`${MODULE_PATHS.CAR_WASH}/records`, params)
  }
}

/**
 * 优惠券API
 */
export const couponAPI = {
  /**
   * 获取优惠券列表
   * @param {Object} params 查询参数
   * @param {number} params.pageNum 页码
   * @param {number} params.pageSize 每页数量
   * @param {string} params.status 状态筛选
   * @returns {Promise} 优惠券列表
   */
  getCouponList(params = {}) {
    return httpClient.get(`${MODULE_PATHS.COUPON}/list`, params)
  },

  /**
   * 领取优惠券
   * @param {number} couponId 优惠券ID
   * @returns {Promise} 领取结果
   */
  claimCoupon(couponId) {
    return httpClient.post(`${MODULE_PATHS.COUPON}/${couponId}/claim`)
  },

  /**
   * 获取我的优惠券
   * @param {Object} params 查询参数
   * @param {string} params.status 状态筛选：available(可用), used(已使用), expired(已过期)
   * @returns {Promise} 我的优惠券列表
   */
  getMyCoupons(params = {}) {
    return httpClient.get(`${MODULE_PATHS.COUPON}/my`, params)
  },

  /**
   * 使用优惠券
   * @param {number} couponId 优惠券ID
   * @param {Object} data 使用数据
   * @returns {Promise} 使用结果
   */
  useCoupon(couponId, data) {
    return httpClient.post(`${MODULE_PATHS.COUPON}/${couponId}/use`, data)
  }
}

/**
 * 消费记录API
 */
export const consumptionAPI = {
  /**
   * 获取消费记录列表
   * @param {Object} params 查询参数
   * @param {number} params.pageNum 页码
   * @param {number} params.pageSize 每页数量
   * @param {string} params.serviceType 服务类型筛选
   * @param {string} params.startDate 开始日期
   * @param {string} params.endDate 结束日期
   * @returns {Promise} 消费记录列表
   */
  getConsumptionRecords(params = {}) {
    return httpClient.get(`${MODULE_PATHS.CONSUMPTION}/records`, params)
  },

  /**
   * 获取消费统计
   * @param {Object} params 查询参数
   * @param {string} params.period 统计周期：month(月), year(年)
   * @returns {Promise} 消费统计
   */
  getConsumptionStats(params = {}) {
    return httpClient.get(`${MODULE_PATHS.CONSUMPTION}/stats`, params)
  }
}

/**
 * 用户认证API
 */
export const authAPI = {
  /**
   * 用户登录
   * @param {Object} data 登录数据
   * @param {string} data.username 用户名
   * @param {string} data.password 密码
   * @param {string} data.captcha 验证码
   * @param {string} data.uuid 验证码UUID
   * @returns {Promise} 登录结果
   */
  login(data) {
    return httpClient.post(`${MODULE_PATHS.SYSTEM}/auth/login`, data)
  },

  /**
   * 用户注册
   * @param {Object} data 注册数据
   * @param {string} data.username 用户名
   * @param {string} data.password 密码
   * @param {string} data.phone 手机号
   * @param {string} data.captcha 验证码
   * @returns {Promise} 注册结果
   */
  register(data) {
    return httpClient.post(`${MODULE_PATHS.SYSTEM}/auth/register`, data)
  },

  /**
   * 获取验证码
   * @returns {Promise} 验证码信息
   */
  getCaptcha() {
    return httpClient.get(`${MODULE_PATHS.SYSTEM}/auth/captcha`)
  },

  /**
   * 刷新token
   * @returns {Promise} 新的token
   */
  refreshToken() {
    return httpClient.post(`${MODULE_PATHS.SYSTEM}/auth/refresh`)
  },

  /**
   * 用户登出
   * @returns {Promise} 登出结果
   */
  logout() {
    return httpClient.post(`${MODULE_PATHS.SYSTEM}/auth/logout`)
  },

  /**
   * 获取用户信息
   * @returns {Promise} 用户信息
   */
  getUserInfo() {
    return httpClient.get(`${MODULE_PATHS.USER}/profile`)
  },

  /**
   * 更新用户信息
   * @param {Object} data 用户数据
   * @returns {Promise} 更新结果
   */
  updateUserInfo(data) {
    return httpClient.put(`${MODULE_PATHS.USER}/profile`, data)
  }
}

// 导出所有API
export default {
  userVehicleAPI,
  rescueAPI,
  repairAPI,
  carWashAPI,
  couponAPI,
  consumptionAPI,
  authAPI
}

